package org.yoki.edu.common.protocol.portal.utils;

import org.yoki.edu.common.utils.encrypt.EncryptUtils;

/**
 * @author Sky$
 * @Description: TODO
 * @date 2017/10/27$ 17:20$
 */
public class ChapEncryptUtils {

    public static byte[] encryptChap(int reqId, String challenge, String pwd) {
        byte[] chapPwd = encryptChap(reqId, challenge.getBytes(), pwd.getBytes());
        return chapPwd;
    }

    public static byte[] encryptChap(int reqId, byte[] challenge, byte[] pwd) {
        /**
         * Chap_Password(Chap密码)的生成：
         * Chap_Password的生成遵循标准的Radious协议中的Chap_Password 生成方法（参见RFC2865）。
         * 密码加密使用MD5算法，MD5函数的输入为ChapID ＋ Password ＋Challenge  (reqId有AC生成, ChapID是ReqID的低8位)
         * 其中，ChapID取reqId的低 8 位，Password的长度不够协议规定的最大长度，其后不需要补零。
         * Chap_Password = MD5 (ChapID+ Password + Challenge )
         */
        byte[] buf = new byte[1 + pwd.length + challenge.length];
        buf[0] = (byte) (reqId & 0xff);
        System.arraycopy(pwd, 0, buf, 1, pwd.length);
        System.arraycopy(challenge, 0, buf, 1 + pwd.length, challenge.length);
        byte[] chapPwd = EncryptUtils.encryptMD5Bytes(buf);
        return chapPwd;
    }

}
